import torch

# 导入神经网络模块，用于定义模型层
import torch.nn as nn

# 导入优化器模块，用于在训练过程中更新模型参数
import torch.optim as optim

# 假设数据

# 输入数据，是一个形状为（3，1）的张量，表示有三个样本，每个样本有一个特征
X = torch.tensor([[1.0], [2.0], [3.0]])

# 目标数据，是一个形状为（3，1）的张量，表示每个样本的预测结果
y = torch.tensor([[2.0], [4.0], [6.0]])


# 定义模型
class LinearRegressionModel(nn.Module):
    def __init__(self):

        # 确保当我创建LinearRegressionModel的一个实例时，它的父类被正确初始化
        super(LinearRegressionModel, self).__init__()

        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        return self.linear(x)


# 初始化模型
model = LinearRegressionModel()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(1000):

    # 前向传播，计算模型输出
    outputs = model(X)

    # 计算损失
    loss = criterion(outputs, y)

    # 清除之前的梯度
    optimizer.zero_grad()

    # 反向传播，计算梯度
    loss.backward()

    # 更新模型参数
    optimizer.step()

# 输出结果
print("模型参数：", model.linear.weight.item(), model.linear.bias.item())
